﻿using Modelado.Modulos.ClasesModelado;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AccesoDatos.Modulos.ClasesAccesoDatos
{
    public class AD_BaseDatos
    {
        public void CRE_BaseDatos(SqlCommand comando, MOD_BaseDatos obj)
        {
            try
            {
                string sp = "SP_CRE_BaseDEDatos";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("BDD_nombrebd", SqlDbType.VarChar));
                comando.Parameters.Add(new SqlParameter("BDD_serverbd", SqlDbType.VarChar));
                comando.Parameters.Add(new SqlParameter("BDD_serveripbd", SqlDbType.VarChar));
                comando.Parameters.Add(new SqlParameter("BDD_usuario", SqlDbType.VarChar));
                comando.Parameters.Add(new SqlParameter("BDD_contrasena", SqlDbType.VarChar));

                comando.Parameters[0].Value = obj.BDD_nombrebd;
                comando.Parameters[1].Value = obj.BDD_serverbd;
                comando.Parameters[2].Value = obj.BDD_serveripbd;
                comando.Parameters[3].Value = obj.BDD_usuario;
                comando.Parameters[4].Value = Operaciones.Encriptar(obj.BDD_contrasena);

                comando.ExecuteNonQuery();
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }

        public void DEL_BaseDatos(SqlCommand comando, int codigo)
        {
            try
            {
                string sp = "SP_DEL_BaseDatos";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@BDD_CODBD", SqlDbType.Int));

                comando.Parameters[0].Value = codigo;

                comando.ExecuteNonQuery();

            }
            catch (Exception exc)
            {

                throw exc;
            }
        }


        public void UPD_BaseDatos(SqlCommand comando, MOD_BaseDatos obj)
        {
            try
            {
                string sp = "SP_UPD_BaseDatos";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("BDD_codbd", SqlDbType.Int));
                comando.Parameters.Add(new SqlParameter("BDD_nombrebd", SqlDbType.VarChar));
                comando.Parameters.Add(new SqlParameter("BDD_serverbd", SqlDbType.VarChar));
                comando.Parameters.Add(new SqlParameter("BDD_serveripbd", SqlDbType.VarChar));
                comando.Parameters.Add(new SqlParameter("BDD_usuario", SqlDbType.VarChar));
                comando.Parameters.Add(new SqlParameter("BDD_contrasena", SqlDbType.VarChar));

                comando.Parameters[0].Value = obj.BDD_codbd;
                comando.Parameters[1].Value = obj.BDD_nombrebd;
                comando.Parameters[2].Value = obj.BDD_serverbd;
                comando.Parameters[3].Value = obj.BDD_serveripbd;
                comando.Parameters[4].Value = obj.BDD_usuario;
                comando.Parameters[5].Value = Operaciones.Encriptar(obj.BDD_contrasena);

                comando.ExecuteNonQuery();
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }


        public List<MOD_BaseDatos> SEL_Grid_BaseDatos(SqlCommand comando)
        {
            try
            {
                string sp = "SP_SEL_Grid_BaseDatos";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                List<MOD_BaseDatos> lista = new List<MOD_BaseDatos>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    MOD_BaseDatos obj = new MOD_BaseDatos();
                    obj.BDD_codbd = Convert.ToInt32(dt.Rows[i]["BDD_codbd"]);
                    obj.BDD_nombrebd = dt.Rows[i]["BDD_nombrebd"].ToString();
                    obj.BDD_serverbd = dt.Rows[i]["BDD_serverbd"].ToString();
                    obj.BDD_serveripbd = dt.Rows[i]["BDD_serveripbd"].ToString();
                    obj.BDD_usuario = dt.Rows[i]["BDD_usuario"].ToString();
                    obj.BDD_contrasena = dt.Rows[i]["BDD_contrasena"].ToString();

                    lista.Add(obj);
                }

                return lista;
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }


        public String GET_PasswordConexion(SqlCommand comando, int codigo_usuario)
        {
            try
            {
                String sp = "SP_GET_PASSWORD_DB";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@USU_CODUSUARIO", SqlDbType.Int));
                comando.Parameters[0].Value = codigo_usuario;
                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);
                DataTable dt = ds.Tables[0];

                String obj;

                obj = dt.Rows[0]["BDD_CONTRASENA"].ToString();

                return obj;

            }
            catch (Exception exc)
            {
                
                throw exc;
            }
        }


        public String GET_StringConexion(SqlCommand comando, int codigo_usuario)
        {
            try
            {
                String sp = "SP_GET_CADENA_DB";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@USU_CODUSUARIO",SqlDbType.Int));
                comando.Parameters[0].Value = codigo_usuario;
                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);
                DataTable dt = ds.Tables[0];

                String obj;

                obj = dt.Rows[0]["conexion"].ToString();
            
                return obj;

            }
            catch (Exception exc)
            {
                
                throw exc;
            }
        }

        public MOD_BaseDatos SEL_BaseDatosByID(SqlCommand comando, int MODU_CODODBC)
        {
            try
            {
                string sp = "SP_SEL_BaseDatosByID";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@BDD_codbd", SqlDbType.Int));

                comando.Parameters[0].Value = MODU_CODODBC;

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                MOD_BaseDatos obj = new MOD_BaseDatos();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    obj.BDD_codbd = Convert.ToInt32(dt.Rows[i]["BDD_codbd"]);
                    obj.BDD_nombrebd = dt.Rows[i]["BDD_nombrebd"].ToString();
                    obj.BDD_serverbd = dt.Rows[i]["BDD_serverbd"].ToString();
                    obj.BDD_serveripbd = dt.Rows[i]["BDD_serveripbd"].ToString();
                    obj.BDD_usuario = dt.Rows[i]["BDD_usuario"].ToString();
                    obj.BDD_contrasena = Operaciones.Desencriptar(dt.Rows[i]["BDD_contrasena"].ToString());
                }

                return obj;
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }

        public int SEL_BaseDatosByNombre(SqlCommand comando, string MODU_NOMBRE)
        {
            try
            {
                string sp = "SP_SEL_BaseDatosByNOmbre";
                int cant = 0;
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                comando.Parameters.Add(new SqlParameter("@BDD_NOMBRE", SqlDbType.VarChar));

                comando.Parameters[0].Value = MODU_NOMBRE;

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                MOD_BaseDatos obj = new MOD_BaseDatos();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    cant = Convert.ToInt32(dt.Rows[i]["BaseDatos_CANT"]);
                }

                return cant;
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }

        public List<MOD_BaseDatos> SEL_BASEDATOS(SqlCommand comando)
        {
            try
            {
                string sp = "SP_SEL_BaseDatos";

                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = sp;
                comando.Parameters.Clear();

                IDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                DataSet ds = new DataSet();
                da.Fill(ds);

                DataTable dt = ds.Tables[0];
                List<MOD_BaseDatos> lista = new List<MOD_BaseDatos>();

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    MOD_BaseDatos obj = new MOD_BaseDatos();
                    obj.BDD_codbd = Convert.ToInt32(dt.Rows[i]["BDD_codbd"]);
                    obj.BDD_nombrebd = dt.Rows[i]["BDD_nombrebd"].ToString();
                    obj.BDD_serverbd = dt.Rows[i]["BDD_serverbd"].ToString();
                    obj.BDD_serveripbd = dt.Rows[i]["BDD_serveripbd"].ToString();
                    obj.BDD_usuario = dt.Rows[i]["BDD_usuario"].ToString();
                    obj.BDD_contrasena = Operaciones.Desencriptar(dt.Rows[i]["BDD_contrasena"].ToString());

                    lista.Add(obj);
                }

                return lista;
            }
            catch (Exception exc)
            {

                throw exc;
            }
        }
    }


}
